{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# week1 work"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#导入必备工具包\n",
    "import numpy as np  # 矩阵操作\n",
    "import pandas as pd # SQL数据处理\n",
    "from sklearn import preprocessing\n",
    "\n",
    "from sklearn.metrics import r2_score  #评价回归预测模型的性能\n",
    "\n",
    "import matplotlib.pyplot as plt   #画图\n",
    "import seaborn as sns\n",
    "\n",
    "# 图形出现在Notebook里而不是新窗口\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. load data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(731, 16)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = pd.read_csv(\"day.csv\")\n",
    "data.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>dteday</th>\n",
       "      <th>season</th>\n",
       "      <th>yr</th>\n",
       "      <th>mnth</th>\n",
       "      <th>holiday</th>\n",
       "      <th>weekday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>weathersit</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>casual</th>\n",
       "      <th>registered</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>2011/1/1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.344167</td>\n",
       "      <td>0.363625</td>\n",
       "      <td>0.805833</td>\n",
       "      <td>0.160446</td>\n",
       "      <td>331</td>\n",
       "      <td>654</td>\n",
       "      <td>985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>2011/1/2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.363478</td>\n",
       "      <td>0.353739</td>\n",
       "      <td>0.696087</td>\n",
       "      <td>0.248539</td>\n",
       "      <td>131</td>\n",
       "      <td>670</td>\n",
       "      <td>801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>2011/1/3</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.196364</td>\n",
       "      <td>0.189405</td>\n",
       "      <td>0.437273</td>\n",
       "      <td>0.248309</td>\n",
       "      <td>120</td>\n",
       "      <td>1229</td>\n",
       "      <td>1349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>2011/1/4</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.200000</td>\n",
       "      <td>0.212122</td>\n",
       "      <td>0.590435</td>\n",
       "      <td>0.160296</td>\n",
       "      <td>108</td>\n",
       "      <td>1454</td>\n",
       "      <td>1562</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>2011/1/5</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.226957</td>\n",
       "      <td>0.229270</td>\n",
       "      <td>0.436957</td>\n",
       "      <td>0.186900</td>\n",
       "      <td>82</td>\n",
       "      <td>1518</td>\n",
       "      <td>1600</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   instant    dteday  season  yr  mnth  holiday  weekday  workingday  \\\n",
       "0        1  2011/1/1       1   0     1        0        6           0   \n",
       "1        2  2011/1/2       1   0     1        0        0           0   \n",
       "2        3  2011/1/3       1   0     1        0        1           1   \n",
       "3        4  2011/1/4       1   0     1        0        2           1   \n",
       "4        5  2011/1/5       1   0     1        0        3           1   \n",
       "\n",
       "   weathersit      temp     atemp       hum  windspeed  casual  registered  \\\n",
       "0           2  0.344167  0.363625  0.805833   0.160446     331         654   \n",
       "1           2  0.363478  0.353739  0.696087   0.248539     131         670   \n",
       "2           1  0.196364  0.189405  0.437273   0.248309     120        1229   \n",
       "3           1  0.200000  0.212122  0.590435   0.160296     108        1454   \n",
       "4           1  0.226957  0.229270  0.436957   0.186900      82        1518   \n",
       "\n",
       "    cnt  \n",
       "0   985  \n",
       "1   801  \n",
       "2  1349  \n",
       "3  1562  \n",
       "4  1600  "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    " data.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. 从data数据将训练数据data2011与测试数据data2012分割"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>dteday</th>\n",
       "      <th>season</th>\n",
       "      <th>yr</th>\n",
       "      <th>mnth</th>\n",
       "      <th>holiday</th>\n",
       "      <th>weekday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>weathersit</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>casual</th>\n",
       "      <th>registered</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>2011/1/1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.344167</td>\n",
       "      <td>0.363625</td>\n",
       "      <td>0.805833</td>\n",
       "      <td>0.160446</td>\n",
       "      <td>331</td>\n",
       "      <td>654</td>\n",
       "      <td>985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>2011/1/2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.363478</td>\n",
       "      <td>0.353739</td>\n",
       "      <td>0.696087</td>\n",
       "      <td>0.248539</td>\n",
       "      <td>131</td>\n",
       "      <td>670</td>\n",
       "      <td>801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>2011/1/3</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.196364</td>\n",
       "      <td>0.189405</td>\n",
       "      <td>0.437273</td>\n",
       "      <td>0.248309</td>\n",
       "      <td>120</td>\n",
       "      <td>1229</td>\n",
       "      <td>1349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>2011/1/4</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.200000</td>\n",
       "      <td>0.212122</td>\n",
       "      <td>0.590435</td>\n",
       "      <td>0.160296</td>\n",
       "      <td>108</td>\n",
       "      <td>1454</td>\n",
       "      <td>1562</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>2011/1/5</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.226957</td>\n",
       "      <td>0.229270</td>\n",
       "      <td>0.436957</td>\n",
       "      <td>0.186900</td>\n",
       "      <td>82</td>\n",
       "      <td>1518</td>\n",
       "      <td>1600</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   instant    dteday  season  yr  mnth  holiday  weekday  workingday  \\\n",
       "0        1  2011/1/1       1   0     1        0        6           0   \n",
       "1        2  2011/1/2       1   0     1        0        0           0   \n",
       "2        3  2011/1/3       1   0     1        0        1           1   \n",
       "3        4  2011/1/4       1   0     1        0        2           1   \n",
       "4        5  2011/1/5       1   0     1        0        3           1   \n",
       "\n",
       "   weathersit      temp     atemp       hum  windspeed  casual  registered  \\\n",
       "0           2  0.344167  0.363625  0.805833   0.160446     331         654   \n",
       "1           2  0.363478  0.353739  0.696087   0.248539     131         670   \n",
       "2           1  0.196364  0.189405  0.437273   0.248309     120        1229   \n",
       "3           1  0.200000  0.212122  0.590435   0.160296     108        1454   \n",
       "4           1  0.226957  0.229270  0.436957   0.186900      82        1518   \n",
       "\n",
       "    cnt  \n",
       "0   985  \n",
       "1   801  \n",
       "2  1349  \n",
       "3  1562  \n",
       "4  1600  "
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data2011=data.head(365)\n",
    "#data2011=data[data.yr==0]\n",
    "#data2011=data[:365]\n",
    "data2011.head()#显示训练数据头五行数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nVmWSZfs0/qAs55KnfynLsZKUYZLTWc8qg+cNMrhsMPVagTJgJiAjM60s+NFoYfZOJC77aJ4robOa\nVvKu69vqVd15kMb/4P9eLv/C3Mk5Nj+12V3fWmBJZQmTN0yW5t62GYCRmVYV/Cgyh307STt7yms0\nnNW00opQ3zJEjrmu+8y+GeZPzddt71J6STOkqBlP30AfIpK42KzdmAIwYol6aLLajtMKvFZXkioD\nRSm5NAK4m816cSuZg/H7PpUVFWe4ZpJJK0qBRoWaluHeNgVgOHGW3nPEhEdNo7MIvKIStLWTsiq5\nTp59NbPILDJ+HxhcNphphjSydoSpLVNM3jAZuWhvW9+2yGMVfW+bAjCcZCm955ouZxF43ZJnKI64\nJGZFUlbFlESzi8xc8ftJgjk4o4rqw+QNk0xeP7mY4qOs97Y5gQ0ncYmzllSWVLNXJjj1sozq83Y+\nlhHnAy8U6hTs1NlXs4vM8igfGZn62dMrvkIaWTtSynvbFECX0UgUjWufuIdg7sQcZ+bOMLF3IrZ+\nbpbVnZ0QLdIs49vHo6NIlEJXiLa6jm+raHaR2RWbrmhaMCcpydMvn+bIo0dKeW9bNtAuopFMnXH7\nQH1t1TDSL+iCOm2v3ZQ9NC+2SbQ92K8mVQSd+jtlqewWFwXUjPM7VS6iNv+2lg20B2nEjhu3j/8A\nxWVc9G2oLttrN2UPzYuhS8tnD+7U3ymPRWbNhqgmrhKmvDMpUwBdRCN23Din5La+bYuCIDbtrkdc\n6t6yC5J2UlQxmiQ68Xcqg+Ia3TDKsa8dq6tR7FOG39aFKYAuwlk20KsSlWUfoGaV7+qNqyPjpcOU\n3WlYBsogtLqJMiiuqFxCUDWRltmMZk7gLmJ8+zh9A/U/6fxL805nsGufIL4Tqy5jYgRlneqWjbg0\nEEbn4QwzXdBS/7amALqI0Q2jLH3d0rr2uBzkrn3CzB6bdY5yfMo81TWMRjhwywHuXHIn22Qbdy65\nkwO3HIjcLksUVZnyXZkC6DLmTkZXbYozzbj2CTI0PJRYFLvMU13DiCJOGB+45QDTd08vBjroWWX6\n7ulIJZB2DUsrEyk2QqICEJFzROSbInJYRJ4QqcawicibROQbInJERL4oIoNe+1Lv/VHv81WBY93h\ntf9ARN7bqpPqZRqJ504y2/g3svPYXsidCX+jk0gSxod2H4rcL6o97RqWpIVr7Z4dpJkBvAK8R1VX\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f1184daf610>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 单个特征散点图\n",
    "plt.scatter(range(data2011.shape[0]),data2011[\"cnt\"].values,color='purple')\n",
    "plt.title('cnt', fontsize=12)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(365, 16)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data2011.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEICAYAAABBBrPDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3Xl8VfWd//HXJyuEhJAFsgIJO0RA\nAcG97qCitFanSmu1tXXa6tRp5zdTbaedjlM7tdMZq221tbWOtbVoqQt13+ouCLKHNewhCQkEskDI\ndr+/P3J00pjc3JDl3Hvzfj4eeeTec77nez/ncsn7nu17zDmHiIhIV2L8LkBERMKbgkJERIJSUIiI\nSFAKChERCUpBISIiQSkoREQkKAWFiIgEpaAQEZGgFBQiITKz183sSyG0G2VmfzSzMjOrMbN3zGxe\nhzaLzWyPmR01s6fMLL3dvFvMbJWZNZrZ/3ZYLsHMlprZbjNzZnZuX62fSFcUFCJ9LxlYCcwG0oGH\ngWfNLBnAzIqAXwHXAVnAMeC+dsuXAT8AfttF/28DnwMq+qN4kY5MQ3jIYGRmo4F7gLNp+8L0R2AV\n8CVgOXAjcAT4mnPueTO7E7gNaAZagP91zt3Sg9erBc5zzn1gZj8ECpxzi71544HNQIZzrq7dMj8A\n8p1zN3TRZynwOefc6z1Zd5Ge0haFDDpmFgs8A+wBCoA8YIk3ex6wFcgEfgw8aGbmnPsO8BZwi3Mu\nuYchcTKQAJR4k4qAdR/Od87tAJqASb1YLZF+o6CQwWgukAv8s3PuqHPuuHPubW/eHufcr51zrbTt\nMsqhbffQCTGz4cAjwL8752q8yclATYemNUDKib6OSH9SUMhgNJq2QGjpZN5H+/2dc8e8h8kn8iJm\nNhT4C7DcOfef7WbVA8M7NB8O1CEShhQUMhjtA8aYWVwPlwv5gJ6ZJQJPAfuBv+8wuxiY2a7tOCAR\n2NbDekQGhIJCBqP3gXLgR2Y2zMyGmNmZISx3ABjXXSMziweWAg3A551zgQ5N/gBcbmZnm9kw4A7g\niQ8PZJtZnJkNAWKBWK++uHb9J3rzARK8+RZC/SInREEhg453/OFyYAKwFygFPhPCovcAV5nZYTO7\nN0i7M4CFwMXAETOr937O9l6/GPgKbYFRSduxia+1W/5faQuZ22g7DbbBm/ahrd60POBF7/HYEOoX\nOSE6PVZERILSFoWIiATV04N5IgJ4u5Ge72yec+6EzpISCVfa9SQiIkFFxRZFZmamKygo8LsMEZGI\n8sEHHxx0zo3srl1UBEVBQQGrVq3yuwwRkYhiZntCaaeD2SIiEpSCQkREglJQiIhIUAoKEREJSkEh\nIiJBKShERCQoBYWIiASloBARkaAUFCIiElRUXJktIgPj0RV7PzZt8bwxPlQiA0lbFCIiEpSCQkRE\nglJQiIhIUAoKEREJSkEhIiJBKShERCQoBYWIiASloBARkaAUFCIiEpSCQkREglJQiIhIUAoKEREJ\nSkEhIiJBKShERCQoBYWIiASloBARkaAUFCIiEpSCQkREggopKMxsgZltNbMSM7utk/mJZvaYN3+F\nmRW0m3e7N32rmc3vQZ8/M7P6E1stERHpK90GhZnFAr8ALgGmAdea2bQOzW4EDjvnJgB3A3d5y04D\nrgGKgAXAfWYW212fZjYHGNHLdRMRkT4QyhbFXKDEObfTOdcELAEWdWizCHjYe7wUuMDMzJu+xDnX\n6JzbBZR4/XXZpxci/wX8S+9WTURE+kIoQZEH7Gv3vNSb1mkb51wLUANkBFk2WJ+3AMucc+XBijKz\nm8xslZmtqqqqCmE1RETkRIQSFNbJNBdimx5NN7Nc4GrgZ90V5Zx7wDk3xzk3Z+TIkd01FxGRExRK\nUJQCo9s9zwfKumpjZnFAKlAdZNmupp8CTABKzGw3kGRmJSGui4iI9INQgmIlMNHMCs0sgbaD08s6\ntFkGXO89vgp4zTnnvOnXeGdFFQITgfe76tM596xzLts5V+CcKwCOeQfIRUTEJ3HdNXDOtZjZLcCL\nQCzwW+dcsZndAaxyzi0DHgQe8b79V9P2hx+v3ePAJqAFuNk51wrQWZ99v3oiItJb1vbFP7LNmTPH\nrVq1yu8yRKLeoyv2fmza4nljfKhE+oKZfeCcm9NdO12ZLSIiQSkoREQkKAWFiIgEpaAQEZGgFBQi\nIhKUgkJERIJSUIiISFAKChERCarbK7NFZHDq7OK6UNvpIrzooi0KEREJSkEhIiJBKShERCQoBYWI\niASloBARkaAUFCIiEpSCQkREglJQiIhIUAoKEREJSkEhIiJBKShERCQoBYWIiASloBARkaAUFCIi\nEpSCQkREglJQiIhIUAoKEREJSkEhIiJBKShERCQoBYWIiASloBARkaAUFCIiEpSCQkREglJQiIhI\nUAoKEREJSkEhIiJBxfldgESfR1fs7XT64nljBriSwa2zfwf9G8iJ0BaFiIgEFVJQmNkCM9tqZiVm\ndlsn8xPN7DFv/gozK2g373Zv+lYzm99dn2b2oJmtM7P1ZrbUzJJ7t4oiItIb3e56MrNY4BfARUAp\nsNLMljnnNrVrdiNw2Dk3wcyuAe4CPmNm04BrgCIgF3jFzCZ5y3TV5zecc7Xea/8PcAvwoz5YVxHp\nRHlNAy8VH2DN3sNsqagjdWg8eSOG4oBTRo8gLlY7Hga7UI5RzAVKnHM7AcxsCbAIaB8Ui4Dve4+X\nAj83M/OmL3HONQK7zKzE64+u+mwXEgYMBdyJr56IdKWqrpFf/LWER1fspak1wKiURIpyh3O0sZV3\ndxyiovY4r24+wDmTRnLauAxizPwuWXwSSlDkAfvaPS8F5nXVxjnXYmY1QIY3fXmHZfO8x132aWYP\nAZfSFkb/1FlRZnYTcBPAmDE6QCfSEy8VV/BPj6/jWHMrV83K5yvnjqcgIwnzwsA5xx3PbOL1rVU8\ns76c3YeOcfXsfOK1dTEohRIUnX2N6Pgtv6s2XU3v7NP2UZ/OuS94u7x+BnwGeOhjjZ17AHgAYM6c\nOdrqEAlBa8Dxk5e2cv/rO5iRn8rdnzmZ8SM/fhjQzJg4KoUJI5N5p+Qgz2+soLahmc+dNpbkRJ0s\nOdiE8vWgFBjd7nk+UNZVGzOLA1KB6iDLdtunc64VeAz4dAg1ikg3WgOOW5es4f7Xd7B43hj+9JXT\nOw2J9syMsyaO5Nq5Yyg70sDvl++hJRAYoIolXIQSFCuBiWZWaGYJtB2cXtahzTLgeu/xVcBrzjnn\nTb/GOyuqEJgIvN9Vn9ZmAnx0jOJyYEvvVlFEWgOOx1ft45n15dx+yRR++KnpJMbFhrz8SXmpXDU7\nn73Vx3h2fXk/VirhqNttSO+Ywy3Ai0As8FvnXLGZ3QGscs4tAx4EHvEOVlfT9ocfr93jtB1raAFu\n9rYU6KLPGOBhMxtO226rdcBX+3aVRaJPVxc5Qtvxhj+vLmXD/hoWFGWTMiQ+aPuuzMgfwf7DDbxV\ncpD8tKHMHpvem5IlgoS0s9E59xzwXIdp32v3+DhwdRfL3gncGWKfAeDMUGoSkdC8uqWStfuOcNG0\nLM6ZNLJXfV1clM3+mgaWrStj3Mhk0pIS+qhKCWc6hUEkiq3dd5jXtlQye0wa5/YyJABiY4xPz8oH\n0C6oQURBIRKlSg8f48+r91OYOYxFp+R+dOprb6UlJXD+5FFsKq9la0Vtn/Qp4U1BIRKFGppa+eP7\ne0lOjOOzc8cQF9O3/9XPnJjJyORE/rK+nOZWnQUV7RQUIlHGOccTa0qpaWjm2lNHk9QP1z3ExcRw\n+cxcqo82sXznoT7vX8KLgkIkyizfeYjislrmF2UzJmNYv73OhFHJjB85jLe2H6SpRVsV0UxBIRJF\nKuuO8/zGCiZnpXDWhMx+f73zp2RR39jCyt3V/f5a4h8FhUiUaA04/rSqlIS4GK6clddnB6+DKcwc\nRmHmMN7cXqVjFVFMg7aIhIne3pHu9a2V7D/SwOK5Y0gZEt+XpQV1wZRR/ObtXazcXc0Z4/t/K0YG\nnrYoRKJAeU0Df91aycmjR3BSXuqAvnZh5jDGpifxTslBAk7jc0YjBYVIhGsNOJ5cs5+h8bEsnJ4z\n4K9vZpwxIZPDx5rZWlE34K8v/U9BIRLhHnlvN6WHG1g4I7dfToUNxbSc4QwfEqdTZaOUgkIkgpUd\naeC/XtzKpKxkZuQP7C6n9mJjjLmFGWyvrKeqrtG3OqR/KChEIpRzju8+tZGAgytmDsxZTsHMLUwn\nNsa0VRGFFBQiEer5jRW8uqWSb140ifRh/o/impwYx/S8VFbvPUx9Y4vf5UgfUlCIRKCahmb+bVkx\nJ+UN5wtnFvhdzkfmFabT2BLg+Q0aWTaaKChEItBdL2zhUH0jP7pyBnGx4fPfeEx6EhnDElj6Qanf\npUgf0gV3MmB6e0FZX77uQL12b3VWe+nhY/xxxV7OGJ/B+tIa1pfW+FBZ58yM2WPTeGnTAfYeOsaY\njCS/S5I+ED5fRUSkWwHn+Mu6MoYlxnHB1Cy/y+nUyaNHYAZLV2urIlooKEQiyNq9R9h3uIH5RdkM\niY/1u5xOjUhK4KwJmfz5g1ICAV2pHQ0UFCIR4nhzKy8UVzA6bSinjBnhdzlBXTU7n/1HGnSqbJRQ\nUIhEiNe2VHK0sYXLZ+YS4/M1E92ZX5RNcmIcT63d73cp0gcUFCIR4EDtcd7dcZA5BWnkp4X/AeIh\n8bFcXJTFCxsraGxp9bsc6SUFhUiYc87xzPoyEuJiuGhatt/lhOzymbnUHm/hrW0H/S5FeklBIRLm\nistq2VF1lIumZpHs06B/J+KsCZmMSIpn2boyv0uRXlJQiISxppYAz20oJ3v4EOYWZvhdTo/Ex8Zw\nyUk5vLzpAMeaNKRHJFNQiISxN7dXcaShmYUzc4iNCe8D2J25fGYODc2tvLal0u9SpBcUFCJhqvpo\nE29uq2JGfirjMpP9LueEzCvMYGRKIsvWavdTJFNQiISp5zaUYwaXnDTwd63rK7ExxmXTc3h9WxVH\nNaJsxFJQiISh7Qfq2FRey3mTR5E6NN7vcnplflE2TS0B3thW5XcpcoIUFCJhpiUQ4C/ry8kY1jYU\nRqQ7tSCNtKR4Xiyu8LsUOUEKCpEw896OQxysb2ThjJywGkL8RMXFxnDh1Cxe21JJU0vA73LkBET+\np1AkitQeb+bVLZVMyU5hcvZwv8vpM/OLsqk73sJ7GvspIikoRMLICxsraA04LpseuQewO3PWxEyS\nEmJ5YaN2P0UiBYVImNh18Chr9x3hnImZZCQn+l1OnxoSH8t5k0fx8qYDtGro8YgTOeMBiHTg1x3z\neiLUGptbAyxbt58RSfF8YtKogSitX3W23hcXZfHshnLW7D3MnIJ0H6qSE6UtCpEw8PC7uzlQ28jC\n6bkkxEXnf8vzpowiPtZ09lMEis5PpEgEqaw9zk9f2c7krBSm5qT4XU6/GT4knjPGZ/Ji8QGc0+6n\nSBJSUJjZAjPbamYlZnZbJ/MTzewxb/4KMytoN+92b/pWM5vfXZ9m9gdv+kYz+62ZRfbVRiLd+OFz\nm2lqCbBwRg4W5jck6q35RdnsrT7Gloo6v0uRHug2KMwsFvgFcAkwDbjWzKZ1aHYjcNg5NwG4G7jL\nW3YacA1QBCwA7jOz2G76/AMwBZgODAW+1Ks1FAljy3ce4qm1ZXzlE+Oi7gB2Zy6aloUZOvspwoSy\nRTEXKHHO7XTONQFLgEUd2iwCHvYeLwUusLavRouAJc65RufcLqDE66/LPp1zzzkP8D6Q37tVFAlP\nza0Bvvf0RvLThvLVcyf4Xc6AGJmSyJyxaTpOEWFCCYo8YF+756XetE7bOOdagBogI8iy3fbp7XK6\nDnghhBpFIs4Db+5k24F6/u3yIoYmxPpdzoCZX5TNloo69h465ncpEqJQgqKznaYdj0R11aan09u7\nD3jTOfdWp0WZ3WRmq8xsVVWVBhuTyFJSWc89r2znsuk5XDQty+9yBtT8orbbuWqrInKEEhSlwOh2\nz/OBjoPLf9TGzOKAVKA6yLJB+zSzfwNGAt/sqijn3APOuTnOuTkjR44MYTVEwkMg4PjWn9czNCGW\n719R5Hc5A250ehJTc4bz0iYFRaQI5YK7lcBEMysE9tN2cHpxhzbLgOuB94CrgNecc87MlgGPmtn/\nALnARNqOO1hXfZrZl4D5wAXOOY0gNghFwoV0vfHI8j18sOcw/331TEamRP8B7M5cNC2Ln7+2nQfe\n3Pmx+4BH0791tOh2i8I75nAL8CKwGXjcOVdsZneY2RVesweBDDMroW0r4DZv2WLgcWATbccabnbO\ntXbVp9fXL4Es4D0zW2tm3+ujdRXx3eFjTdz1whbOmTSSK2d1PNQ3eFw8LYuAg60VtX6XIiEIaQgP\n59xzwHMdpn2v3ePjwNVdLHsncGcofXrTNayIRCXnHE+t2Q/ADz91UtRfMxFMUe5wclOHsKm8jtlj\nNZxHuNOV2SIDZM2+I2yvrOdbC6aQn5bkdzm+MjMunJZFSWUdza3awxzuFBQiA6CmoZln15czNj2J\n604b63c5YeHCqVk0tzpKKuv9LkW6od084hvnHBU1x9mwv4Y9h47iHJjBzqqj5KQOIW1YAjFRsHsm\n4ByPr9pHa8Dx6dn5xMRE/jr1hdPGZZAYF8Pm8lqm5kTPTZqikYJCBlx9Ywur9xxm5e5qvvPUxi7b\nDUuIpSgvlRl5qTjnInaf/lvbqth18CifnpVH5iAYpiNUCXExTMpKYXNFHQHnouJLQbRSUMiAaW4N\n8Ma2Kt7cVkVLwFGQMYxbzp/A9LxUJoxKJi42htaA41dv7KCi5jjbK+tZs/cw7++q5u2Sg3z13PFc\nNj2y7iO9r/oYL28+wPS8VGaNSfO7nLAzLWc4G/bXUFp9jDEZw/wuR7qgoJABsevgUZ5YXcqho03M\nyE/lvMmjyBo+pNNz5vPTkshPS2JOQTpNLQE27K9hXekRbl2ylp+9VsK/XjaVcyeH/819DtY38ocV\ne0gdGs8nT86L2C2i/jQpK4UYg03ldQqKMKagkH63fOchnllfxoikBL54ZiETRiWHvGxCXAyzx6Zx\nypgRbCqr5cXiCm54aCWTs1K44uRc0pIS+rHyE9fSGuCWR1dzrKmVr3xi/KAay6knhibEUpg5jM3l\ntSw4KdvvcqQLkbMNLxEn4BxPr93PsnVlTByVwi3nTehRSLQXY8ZJeanceuFELjkpm12HjnLPq9tZ\nvvMQgTC8Cc5/Pr+F5Tur+eTJeeSOGOp3OWFtas5wquobOVjX6Hcp0gUFhfSLgHM8uXo/K3ZVc/aE\nTK47fSxD4nv/rTouJoazJ47k1vMnMiYtiWXrynjw7V1UH23qg6r7xsPv7ubBt3dx/eljmTVWxyW6\n8+EZT5vKdZV2uFJQSJ/7cEvig72HOX/KKC6ZntPnZ7SkDUvgC2cW8KlT8ig70sA9r27j3R0HCQT8\n3bp4YWMF3/9LMRdOzeJ7lw++Af9ORFpSAjmpQ9is4TzCloJC+txLxRWs3H2YcyeN5IIp/XfQ2cw4\ntSCdWy+YSGHmMJ5ZX87i3yxnX7U/9zl4e/tBbl2yhpn5I/jZtacQq+slQjY1Zzh7Dx2jvrHF71Kk\nEwoK6VN/WrWPN7cfZG5hunfby/7/YzkiKYHrTy/gylPy2Li/lgU/fZM/vr8XN4DHLt7YVsWND6+k\nMHMYD14/Rweve2hqznAcGiQwXCkopM+8v6uabz+5gfEjh3H5jNwBPR3UzJhTkM4L/3g2M0eP4PYn\nNnDDQyspr2no99d+YWMFX354FeNHJvPol08bFPe+7mu5qUNIHRrPpvI6v0uRTigopE9U1h7nq7//\ngNFpSSyeO9a33S75aUn8/sZ53LGoiPd3VXPhf7/BOyUHae2HYxeBgOOeV7bzld9/wLTc4Tz65Xmk\nDwvP03XDnZkxNSeFkso6jje3+l2OdKCgkF5rDThuXbKWo00t/Oq62b7vdomJMT5/egEv/uM5nFqY\nzrMbyrnv9ZI+HXyuqq6Rv//9B9z9yjaunJXHkptOY0SYXtMRKabmDKe51fH29oN+lyId6II76bWf\nv1bCezsP8eOrZjAxK4WVuw+HvGxnd7PrK2MyknjohlP59pMbeX5jOb99ZxcTRyVz/pRRjO3iKuDu\n7q4XCDiWri7lzmc309DUyncXTuOLZxboqusQdPdvXZg5jMS4GF7edIALB9l9xMOdgkJ6ZdXuau55\ndRtXnpLH1bPz/S7nY8yM6XmpTMlOYcXOQ/x1axW/enMno9OGMjQhhgunZpEyJL7bfppaAjy9dj8P\nvLmT7ZX1zC1I54dXTj/hCwjl4+Ji2gYJfHXLAVoDTmeNhREFhZywY00t/NOf1pGXNpQ7Phned2yL\nj43hrIkjObUwndV7j/BuyUG+8dg6EmJjOGtiJqeMHkFR3nDKaxpI8AYdPNLQzKH6Jt4uqeKtbQep\na2xhSnYK91xzMpfPyNVw4f3gw0EC1+47wmxdrBg2FBRywn70/Bb2Vh/jj18+jeTEyPgoJcbFcvq4\nDOYVpjM1J4XnNlTw1y2VvLalsstlsoYnctmMHC6ZnsM5EzPDOhAj3aSsFOJijJc3HVBQhJHI+N8t\nYeedkoP87r09fPHMQk4bl+F3OT0WY8bssenMHpvOdxdOo+54M5vL63hqzX6aWgPgIDUpnhFD47nl\n/AkKhwEyNCGW08Zl8NKmCm67ZIrf5YhHQSE9dqyphW/9eT3jMofxLwsm+11On0gZEs/cwvROz4xS\nSAys+UVZfPfpYrYfqGNiVorf5Qg6PVZOwN0vb6P0cAM/+vSMPhnoT6S9+UXZmMHzGyv8LkU8Cgrp\nkQ2lNTz49i6unTuGuYXpfpcjUWjU8CHMGpPGCwqKsKGgkJC1tAa47Yn1ZCQnav+x9KtLTspmU3kt\new/5M8Cj/C0do5BOdXZxVEsgQHFZLT9ffAqpQ7u/9kDkRM0vyuYHz27m+Y3l/P0nxvtdzqCnLQoJ\nSX1jCz95cStnTsjgsuk5fpcjUW50ehIn5Q3XcYowoaCQkLxUXMGxpla+f3mRzgKSAXHJSTms3Xdk\nQEYAluAUFNKtfdXH+GDPYb5wZoFOV5QBc8lJ2QA8t0FbFX5TUEhQAef4y/oykhPj+PoFE/0uRwaR\ncSOTmZoznGfWl/ldyqCnoJCgVu85TOnhBhaclB3S4HkifenymTms2XuE0sM6+8lPCgrpUkNTKy8U\nVzA2I4mTR4/wuxwZhBZOzwXg2fXlPlcyuCkopEsvbz5AQ1MrV8wc2NuainxoTEYSM/NTeUZB4SsF\nhXSqvKaBFTsPMW9cBjmpQ/0uRwaxhTNy2bC/ht0Hj/pdyqClC+7kY5xzLFtXxtCEWC6a+n93Guvu\n7m/RKtT1DvVuff15V79odNmMHO58bjPPbijn5vMm+F3OoKQtCvmYp9eWsefQMRYUZft+/2uR3BFD\nObUgjafW7Mc553c5g5KCQv5G3fFmfvjcZvLThjJLN46RMPHJU/LYXllPcVmt36UMSgoK+Rs/e62E\nqvrGtlt96gC2hImF03NJiI3hidX7/S5lUFJQyEdKKuv47du7+LvZoxmdnuR3OSIfSU2K5/wpo1i2\nroyW1oDf5Qw6IQWFmS0ws61mVmJmt3UyP9HMHvPmrzCzgnbzbvembzWz+d31aWa3eNOcmWX2bvUk\nVM45/v0vm0hKiI2au9ZJdPnUrDwO1jfyVslBv0sZdLoNCjOLBX4BXAJMA641s2kdmt0IHHbOTQDu\nBu7ylp0GXAMUAQuA+8wstps+3wEuBPb0ct2kB14sPsBb2w/yzYsmkZGc6Hc5Ih9z3uRRjEiK50nt\nfhpwoWxRzAVKnHM7nXNNwBJgUYc2i4CHvcdLgQus7QqtRcAS51yjc24XUOL112Wfzrk1zrndvVwv\n6YGGplb+45lNTMlO4XOnjfW7HJFOJcTFsHBGDi9tqqD2eLPf5QwqoQRFHrCv3fNSb1qnbZxzLUAN\nkBFk2VD6DMrMbjKzVWa2qqqqqieLSge/fGMH+4808P0rioiL1WErCV9Xzx7N8eYAy9ZqoMCBFMoF\nd52d+tLxZOau2nQ1vbO/Rj06Qdo59wDwAMCcOXN0cnUnQrlQbF/1Me5/YwdXzMzltHEZffIakaI3\ntUfyeoe7rt7bxfPGMCM/lSnZKSxZuVdbvwMolK+PpcDods/zgY5x/lEbM4sDUoHqIMuG0qcMgP94\nZhNxMca3L53qdyki3TIzrp07ho37a9m4v8bvcgaNUIJiJTDRzArNLIG2g9PLOrRZBlzvPb4KeM21\nXUK5DLjGOyuqEJgIvB9in9LP3thWxUubDvAP508kO3WI3+WIhOSTJ+eRGBfDkpXaqhso3QaFd8zh\nFuBFYDPwuHOu2MzuMLMrvGYPAhlmVgJ8E7jNW7YYeBzYBLwA3Oyca+2qTwAz+7qZldK2lbHezH7T\nd6srH2pqCfDvy4opzBzGF88q8LsckZClJsVz2fQcnl5TxrGmFr/LGRRCGhTQOfcc8FyHad9r9/g4\ncHUXy94J3BlKn970e4F7Q6lLTtxD7+xi58GjPPSFU0mM03hOElmumTuGJ9bs55n15fzdnNHdLyC9\nolNcBqEDtce599XtXDg1i/Mmj/K7HJEeO7UgjUlZyTz87m4NFDgAFBSD0B1/2URzwPG9hR2vmxSJ\nDGbGDWcUUlxWy6o9h/0uJ+opKAaZVzYd4NkN5dx6wUTGZGg8J4lcnzwll9Sh8fzvO7v9LiXqKSgG\nkcaWVr739EYmZ6Xw5bPH+V2OSK8kJcRxzamjeaG4grIjDX6XE9V0h7tB5JVNByivOc4VM3NZ+kGp\n3+WI9Np1p4/l12/t5JHle/jWgil+lxO1tEUxSJQePsa7Ow4xtzCdMRnD/C5HpE/kpyUxvyibR1fs\npb5Rp8r2FwXFINAacDy5Zj/JQ+KYX5TtdzkifeornxhPTUMzf1iuAaf7i4JiEHh3x0HKa45z+Yxc\nhsTrmgmJLjNHj+DsiZn8+q1dHG9u9bucqKSgiHKH6ht5ZfMBpmanUJQ73O9yRPrFzedN4GB9I4+v\n2td9Y+kxBUUUCzjHnz4oJTbGuHxmLqZ7YEuUmleYzpyxafzqjZ0061apfU5BEcXe3FbF3upjXDEz\nlxFJCX6XI9JvzIybz5/A/iP2mwnpAAAL9klEQVQNPLZSWxV9TUERpTbur+HVzZWclJfKzPwRfpcj\n0u/OnTSSUwvSuOfV7RossI8pKKLQ8eZWvvHYWpISY/mkdjnJIGFm3HbJFKrqGvnt27v8Lieq6IK7\nKPSTF7eyvbKeG84oIClR/8QSHUK5Y+PsselcPC2LX76xk8XzxpI+TLtc+4K2KKLMezsO8eA7u/jc\naWOYlJXidzkiA+5fFkzmWFML97663e9SooaCIoocOdbE//vTOgoyhunWpjJoTRiVwuJ5Y/jde7sp\nLtPtUvuCgiJKBAKOf3p8HZV1x7n7MyeTlKBdTjJ4/fPFU0hLSuBfn9pIIKD7VfSWgiJKPPDWTl7d\nUsl3Lp3KyaN1lpMMbqlJ8Xz70qms2XuEx3QRXq8pKKLA8p2H+K8Xt3LZ9ByuP6PA73JEwsKVs/KY\nW5jOj57fQmXtcb/LiWgKigi3r/oYX/vDasZmJPGjT0/XqbAiHjPjh5+aTmNLK/9v6XrdMrUXFBQR\n7GhjC1/+3SqaWwP85vNzSBkS73dJImFlwqhkvnPpVN7cVsXv3tPosidKQRGhWgOObzy2lm0H6vj5\n4lmMG5nsd0kiYelzp43l3Mkj+eFzm9l+oM7vciKSTo2JQM45vr+smJc2HeDfLp/G/sMNnV6MNBjp\nfZDOPgOnj8tg5a5qrv31cr76iQkMTYj92MV60jVtUUSg+9/YwSPL93DTOeP4wpmFfpcjEvZShsSz\neN5Yqo828fiqfQR0vKJHFBQR5vfL9/DjF7ay6ORcbtM9gkVCVpg5jIUzctl6oI6Xig/4XU5EUVBE\nkD++v5d/fWojF0wZxX9dNZOYGJ3hJNIT8wrTmVuYzpvbq/jNWzv9Lidi6BhFhHh0xV6+/eQGzps8\nkvs+N4uEOGW8SE+ZGVfMzOVYUys/eHYzwxLjuHaujlV0R0ER5pxz/OKvJfzkpW2cO3kk939uNolx\nuu+1yImKMePv5uSTmZzAt5/cQMA5PjtvrN9lhTV9LQ1jLa0Bvr+smJ+8tI1PnZLHrz8/hyHxCgmR\n3oqLieH+z87mvMmj+M6TG/npK9t0QV4QCoowVX20iesfep+H39vDl88u5L+vnkl8rP65RPrK0IRY\nfnXdbD49K5+fvrKdf166nuPNrX6XFZa06ykMrdt3hJsfXU1lbSM/vmoGfzdntN8liUSl+NgYfnL1\nDPLShnLvq9spLqvl/s/OoiBzmN+lhRV9RQ0jLa0B7nllO1fe/y6BgOPxr5yukBDpZ2bGNy+axEM3\nnEp5TQMLf/Y2j7y3W8OTt6OgCBNr9h7mU/e9y92vbOPyGTk8/4/naLhwkQF03pRRPPMPZ3Hy6BF8\n9+liPvPAe2wur/W7rLCgXU8+KzvSwE9f2cbjq0rJGp7ILxbP4rIZOX6XJTIo5acl8ciNc1n6QSk/\neHYzl977Fp86OY9vXDSJ0elJfpfnGwWFT/ZVH+OBN3fy2Mp9OBw3nTOOr18wkeRE/ZOI+MnMuHrO\naC6els19b5Tw0Du7eXpdGZeclM2Xzx7HzEG4pa+/SgOouTXAW9ureHTFXl7dUklcTNsH8mvnjic/\nbfB+WxEJR6lJ8dx+yVRuOKOAh97ZzR9X7OWZ9eVMyU7hqtn5LJyRS3bqEL/LHBAKin5We7yZ93Yc\n4q9bKnmhuIIjx5rJTE7g5nMnsHjeGHJHDPW7RBEJIid1KN++dCpfv2AiT64uZenq/fzg2c384NnN\nTM9L5bwpozhtXDqzxqRF7XVOIQWFmS0A7gFigd84537UYX4i8DtgNnAI+Ixzbrc373bgRqAV+Lpz\n7sVgfZpZIbAESAdWA9c555p6t5oD42hjCzuq6tlaUceG/TWs3XeE4rJaWgOO5MQ4Lpw6istm5PKJ\nSSM1BIdIhElOjOO60wu47vQCdlTV81LxAV7ZfICfv7ade1+F+Fhj4qgUpmSnMCUnhSnZw5mUlcKo\nlMSIH5et26Aws1jgF8BFQCmw0syWOec2tWt2I3DYOTfBzK4B7gI+Y2bTgGuAIiAXeMXMJnnLdNXn\nXcDdzrklZvZLr+/7+2JlO3LO0dzqaAkEaG51tAYcLa0Bmj/87c1raXXUN7ZQf7yFusZm6o+3UNPQ\nTEXtcSpqjn/0+2D9/+VZcmIc0/NS+dq54zlrQianjElTOIhEifEjk/nqucl89dzx1B5vZtXuat7f\ndZhN5bW8s+MgT6zZ/1Hb+FhjVMoQclKHkJ06hFEpQ0gdGs/woXEMHxLP8KHxDEuMJTEuhsS4WBLi\nYkiMi/F+xxIfa8RY248Zf/M7xhiQ2x+HskUxFyhxzu0EMLMlwCKgfVAsAr7vPV4K/Nzaql8ELHHO\nNQK7zKzE64/O+jSzzcD5wGKvzcNev/0SFDc8tJI3tlWd8PJpSfFkDW/7AEzPG0HeiCFMGJXCxKxk\nCjKGERvh3yJEpHvDh8Rz/pQszp+S9dG0w0eb2FJRR0llHeU1bV8ky2uOU1xWy+t1VdQ3tvTZ67/y\nzXOYMCqlz/rrTChBkQfsa/e8FJjXVRvnXIuZ1QAZ3vTlHZbN8x531mcGcMQ519JJ+79hZjcBN3lP\n681sawjr0qf6+A68mcDBvu0y6ug96t6geo8+e2KLZQIHT3DZsDPxrl4tHtJoiKEERWdfiztesthV\nm66md7YPJlj7j0907gHggc7mRSIzW+Wcm+N3HeFM71H39B51T+9Rz4Wy07wUaD+ORD5Q1lUbM4sD\nUoHqIMt2Nf0gMMLro6vXEhGRARRKUKwEJppZoZkl0HZwelmHNsuA673HVwGvubYxe5cB15hZonc2\n00Tg/a769Jb5q9cHXp9Pn/jqiYhIb3W768k75nAL8CJtp7L+1jlXbGZ3AKucc8uAB4FHvIPV1bT9\n4cdr9zhtB75bgJudc60AnfXpveS3gCVm9gNgjdf3YBA1u9H6kd6j7uk96p7eox4y3axDRESC0Yn9\nIiISlIJCRESCUlD4zMwWmNlWMysxs9v8rmcgmdloM/urmW02s2Izu9Wbnm5mL5vZdu93mjfdzOxe\n771ab2az2vV1vdd+u5ld39VrRiozizWzNWb2jPe80MxWeOv7mHdSCN6JI49579EKMyto18ft3vSt\nZjbfnzXpP2Y2wsyWmtkW7zN1uj5LfcQ5px+ffmg7kL8DGAckAOuAaX7XNYDrnwPM8h6nANuAacCP\ngdu86bcBd3mPLwWep+16m9OAFd70dGCn9zvNe5zm9/r18Xv1TeBR4Bnv+ePANd7jXwJf9R5/Dfil\n9/ga4DHv8TTv85UIFHqfu1i/16uP36OHgS95jxOAEfos9c2Ptij89dHwKK5t4MMPh0cZFJxz5c65\n1d7jOmAzbVfiL6LtPz3e7096jxcBv3NtltN2zU0OMB942TlX7Zw7DLwMLBjAVelXZpYPXAb8xntu\ntA11s9Rr0vE9+vC9Wwpc0HE4HefcLqD9cDoRz8yGA+fgnSXpnGtyzh1Bn6U+oaDwV2fDo3Q6ZEm0\n83aRnAKsALKcc+XQFibAKK9ZV+9XtL+PPwX+BQh4z4MNdfM3w+kA7YfTieb3aBxQBTzk7aL7jZkN\nQ5+lPqGg8FfIQ5ZEMzNLBv4M/KNzLthNins6VEzEM7OFQKVz7oP2kztp6rqZF7XvkScOmAXc75w7\nBThK266mrgzW9+mEKCj8FcrwKFHNzOJpC4k/OOee8CYf8HYD4P2u9Kb3dEiYaHAmcIWZ7aZt1+T5\ntG1hdDXUTU+H04kWpUCpc26F93wpbcGhz1IfUFD4K5ThUaKWt+/8QWCzc+5/2s1qPyRM+2FclgGf\n985YOQ2o8XYnvAhcbGZp3lktF3vTIp5z7nbnXL5zroC2z8drzrnP0vVQNz0dTicqOOcqgH1mNtmb\ndAFtI0Los9QX/D6aPth/aDv7YhttZ6F8x+96Bnjdz6Jts349sNb7uZS2feqvAtu93+lee6Pthlc7\ngA3AnHZ9fZG2A7QlwBf8Xrd+er/O5f/OehpH2x/6EuBPQKI3fYj3vMSbP67d8t/x3rutwCV+r08/\nvD8nA6u8z9NTtJ21pM9SH/xoCA8REQlKu55ERCQoBYWIiASloBARkaAUFCIiEpSCQkREglJQiIhI\nUAoKEREJ6v8Dx3KCqrPEussAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f1151f3eb90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 目标cnt的直方图／分布:双峰正态分布\n",
    "fig = plt.figure()\n",
    "sns.distplot(data2011.cnt.values, bins = 40, kde = True)\n",
    "plt.title('cnt_2011', fontsize = 12)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>season</th>\n",
       "      <th>yr</th>\n",
       "      <th>mnth</th>\n",
       "      <th>holiday</th>\n",
       "      <th>weekday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>weathersit</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>casual</th>\n",
       "      <th>registered</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>365.000000</td>\n",
       "      <td>365.000000</td>\n",
       "      <td>365.0</td>\n",
       "      <td>365.000000</td>\n",
       "      <td>365.000000</td>\n",
       "      <td>365.000000</td>\n",
       "      <td>365.000000</td>\n",
       "      <td>365.000000</td>\n",
       "      <td>365.000000</td>\n",
       "      <td>365.000000</td>\n",
       "      <td>365.000000</td>\n",
       "      <td>365.000000</td>\n",
       "      <td>365.000000</td>\n",
       "      <td>365.000000</td>\n",
       "      <td>365.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>183.000000</td>\n",
       "      <td>2.498630</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.526027</td>\n",
       "      <td>0.027397</td>\n",
       "      <td>3.008219</td>\n",
       "      <td>0.684932</td>\n",
       "      <td>1.421918</td>\n",
       "      <td>0.486665</td>\n",
       "      <td>0.466835</td>\n",
       "      <td>0.643665</td>\n",
       "      <td>0.191403</td>\n",
       "      <td>677.402740</td>\n",
       "      <td>2728.358904</td>\n",
       "      <td>3405.761644</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>105.510663</td>\n",
       "      <td>1.110946</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3.452584</td>\n",
       "      <td>0.163462</td>\n",
       "      <td>2.006155</td>\n",
       "      <td>0.465181</td>\n",
       "      <td>0.571831</td>\n",
       "      <td>0.189596</td>\n",
       "      <td>0.168836</td>\n",
       "      <td>0.148744</td>\n",
       "      <td>0.076890</td>\n",
       "      <td>556.269121</td>\n",
       "      <td>1060.110413</td>\n",
       "      <td>1378.753666</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.059130</td>\n",
       "      <td>0.079070</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.022392</td>\n",
       "      <td>9.000000</td>\n",
       "      <td>416.000000</td>\n",
       "      <td>431.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>92.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.325000</td>\n",
       "      <td>0.321954</td>\n",
       "      <td>0.538333</td>\n",
       "      <td>0.135583</td>\n",
       "      <td>222.000000</td>\n",
       "      <td>1730.000000</td>\n",
       "      <td>2132.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>183.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.479167</td>\n",
       "      <td>0.472846</td>\n",
       "      <td>0.647500</td>\n",
       "      <td>0.186900</td>\n",
       "      <td>614.000000</td>\n",
       "      <td>2915.000000</td>\n",
       "      <td>3740.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>274.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>0.656667</td>\n",
       "      <td>0.612379</td>\n",
       "      <td>0.742083</td>\n",
       "      <td>0.235075</td>\n",
       "      <td>871.000000</td>\n",
       "      <td>3632.000000</td>\n",
       "      <td>4586.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>365.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>12.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>0.849167</td>\n",
       "      <td>0.840896</td>\n",
       "      <td>0.972500</td>\n",
       "      <td>0.507463</td>\n",
       "      <td>3065.000000</td>\n",
       "      <td>4614.000000</td>\n",
       "      <td>6043.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          instant      season     yr        mnth     holiday     weekday  \\\n",
       "count  365.000000  365.000000  365.0  365.000000  365.000000  365.000000   \n",
       "mean   183.000000    2.498630    0.0    6.526027    0.027397    3.008219   \n",
       "std    105.510663    1.110946    0.0    3.452584    0.163462    2.006155   \n",
       "min      1.000000    1.000000    0.0    1.000000    0.000000    0.000000   \n",
       "25%     92.000000    2.000000    0.0    4.000000    0.000000    1.000000   \n",
       "50%    183.000000    3.000000    0.0    7.000000    0.000000    3.000000   \n",
       "75%    274.000000    3.000000    0.0   10.000000    0.000000    5.000000   \n",
       "max    365.000000    4.000000    0.0   12.000000    1.000000    6.000000   \n",
       "\n",
       "       workingday  weathersit        temp       atemp         hum   windspeed  \\\n",
       "count  365.000000  365.000000  365.000000  365.000000  365.000000  365.000000   \n",
       "mean     0.684932    1.421918    0.486665    0.466835    0.643665    0.191403   \n",
       "std      0.465181    0.571831    0.189596    0.168836    0.148744    0.076890   \n",
       "min      0.000000    1.000000    0.059130    0.079070    0.000000    0.022392   \n",
       "25%      0.000000    1.000000    0.325000    0.321954    0.538333    0.135583   \n",
       "50%      1.000000    1.000000    0.479167    0.472846    0.647500    0.186900   \n",
       "75%      1.000000    2.000000    0.656667    0.612379    0.742083    0.235075   \n",
       "max      1.000000    3.000000    0.849167    0.840896    0.972500    0.507463   \n",
       "\n",
       "            casual   registered          cnt  \n",
       "count   365.000000   365.000000   365.000000  \n",
       "mean    677.402740  2728.358904  3405.761644  \n",
       "std     556.269121  1060.110413  1378.753666  \n",
       "min       9.000000   416.000000   431.000000  \n",
       "25%     222.000000  1730.000000  2132.000000  \n",
       "50%     614.000000  2915.000000  3740.000000  \n",
       "75%     871.000000  3632.000000  4586.000000  \n",
       "max    3065.000000  4614.000000  6043.000000  "
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data2011.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f114f662a10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure()\n",
    "sns.distplot(data2011.workingday.values, bins = 30, kde = False)\n",
    "#分别观察X_Train的各个特征属性的影响大小，筛选出影响明显的特征\n",
    "#sns.distplot(data2011.yr.values, bins=30, kde=False)\n",
    "plt.xlabel('workingday',fontsize=12)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>dteday</th>\n",
       "      <th>season</th>\n",
       "      <th>yr</th>\n",
       "      <th>mnth</th>\n",
       "      <th>holiday</th>\n",
       "      <th>weekday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>weathersit</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>casual</th>\n",
       "      <th>registered</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>365</th>\n",
       "      <td>366</td>\n",
       "      <td>2012/1/1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.370000</td>\n",
       "      <td>0.375621</td>\n",
       "      <td>0.692500</td>\n",
       "      <td>0.192167</td>\n",
       "      <td>686</td>\n",
       "      <td>1608</td>\n",
       "      <td>2294</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>366</th>\n",
       "      <td>367</td>\n",
       "      <td>2012/1/2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.273043</td>\n",
       "      <td>0.252304</td>\n",
       "      <td>0.381304</td>\n",
       "      <td>0.329665</td>\n",
       "      <td>244</td>\n",
       "      <td>1707</td>\n",
       "      <td>1951</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>367</th>\n",
       "      <td>368</td>\n",
       "      <td>2012/1/3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.150000</td>\n",
       "      <td>0.126275</td>\n",
       "      <td>0.441250</td>\n",
       "      <td>0.365671</td>\n",
       "      <td>89</td>\n",
       "      <td>2147</td>\n",
       "      <td>2236</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>368</th>\n",
       "      <td>369</td>\n",
       "      <td>2012/1/4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0.107500</td>\n",
       "      <td>0.119337</td>\n",
       "      <td>0.414583</td>\n",
       "      <td>0.184700</td>\n",
       "      <td>95</td>\n",
       "      <td>2273</td>\n",
       "      <td>2368</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>369</th>\n",
       "      <td>370</td>\n",
       "      <td>2012/1/5</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.265833</td>\n",
       "      <td>0.278412</td>\n",
       "      <td>0.524167</td>\n",
       "      <td>0.129987</td>\n",
       "      <td>140</td>\n",
       "      <td>3132</td>\n",
       "      <td>3272</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     instant    dteday  season  yr  mnth  holiday  weekday  workingday  \\\n",
       "365      366  2012/1/1       1   1     1        0        0           0   \n",
       "366      367  2012/1/2       1   1     1        1        1           0   \n",
       "367      368  2012/1/3       1   1     1        0        2           1   \n",
       "368      369  2012/1/4       1   1     1        0        3           1   \n",
       "369      370  2012/1/5       1   1     1        0        4           1   \n",
       "\n",
       "     weathersit      temp     atemp       hum  windspeed  casual  registered  \\\n",
       "365           1  0.370000  0.375621  0.692500   0.192167     686        1608   \n",
       "366           1  0.273043  0.252304  0.381304   0.329665     244        1707   \n",
       "367           1  0.150000  0.126275  0.441250   0.365671      89        2147   \n",
       "368           2  0.107500  0.119337  0.414583   0.184700      95        2273   \n",
       "369           1  0.265833  0.278412  0.524167   0.129987     140        3132   \n",
       "\n",
       "      cnt  \n",
       "365  2294  \n",
       "366  1951  \n",
       "367  2236  \n",
       "368  2368  \n",
       "369  3272  "
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#将数据分割出测试数据2012\n",
    "data2012=data[365:]\n",
    "data2012.head()#显示测试数据头五行数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(366, 16)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data2012.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 从2011年的训练数据中分离输入特征x和输出y\n",
    "y_train = data2011['cnt'].values\n",
    "#X_train= data2011.drop('cnt', axis = 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "X_train=data2011.loc[:,['instant','season','mnth','weekday','workingday','weathersit','temp','atemp','hum','windspeed']]\n",
    "#提取2011年数值型特征\n",
    "X_train.head()\n",
    "X_train.shape\n",
    "#用于后续显示权重系数对应的特征\n",
    "columns = X_train.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(366, 10)"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 从2012年的测试数据中分离输入特征x和输出y\n",
    "y_test= data2012['cnt'].values\n",
    "#X_test= data2012.drop('cnt', axis = 1)\n",
    "X_test= data2012.loc[:,['instant','season','mnth','weekday','workingday','weathersit','temp','atemp','hum','windspeed']]#提取2012年数值型特征\n",
    "X_test.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3、数据预处理 / 特征工程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import MinMaxScaler\n",
    "# 数据标准化\n",
    "from sklearn.preprocessing import StandardScaler\n",
    " \n",
    "ss_X = MinMaxScaler()\n",
    "ss_y = MinMaxScaler()\n",
    "# 分别初始化对特征和目标值的标准化器\n",
    "ss_X = StandardScaler()\n",
    "ss_y = StandardScaler()\n",
    "\n",
    "# 分别对训练和测试数据的特征以及目标值进行标准化处理\n",
    "X_train = ss_X.fit_transform(X_train)\n",
    "X_test = ss_X.fit_transform(X_test)\n",
    "#对y做标准化不是必须\n",
    "#对y标准化的好处是不同问题的w差异不太大，同时正则参数的范围也有限\n",
    "y_train = ss_y.fit_transform(y_train.reshape(-1, 1))\n",
    "y_test = ss_y.fit_transform(y_test.reshape(-1, 1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of RidgeCV on test is 0.6751015852813699\n",
      "The r2 score of RidgeCV on train is 0.7571277692624068\n"
     ]
    }
   ],
   "source": [
    "#岭回归／L2正则\n",
    "#class sklearn.linear_model.RidgeCV(alphas=(0.1, 1.0, 10.0), fit_intercept=True, \n",
    "#                                  normalize=False, scoring=None, cv=None, gcv_mode=None, \n",
    "#                                  store_cv_values=False)\n",
    "from sklearn.linear_model import  RidgeCV\n",
    "\n",
    "#设置超参数（正则参数）范围\n",
    "alphas = [ 0.01, 0.1, 1, 10,100]\n",
    "#n_alphas = 20\n",
    "#alphas = np.logspace(-5,2,n_alphas)\n",
    "\n",
    "#生成一个RidgeCV实例\n",
    "ridge = RidgeCV(alphas=alphas, store_cv_values=True)  \n",
    "\n",
    "#模型训练\n",
    "ridge.fit(X_train, y_train)    \n",
    "\n",
    "#预测\n",
    "y_test_pred_ridge = ridge.predict(X_test)\n",
    "y_train_pred_ridge = ridge.predict(X_train)\n",
    "\n",
    "\n",
    "# 评估，使用r2_score评价模型在测试集和训练集上的性能\n",
    "print 'The r2 score of RidgeCV on test is', r2_score(y_test, y_test_pred_ridge)\n",
    "print 'The r2 score of RidgeCV on train is', r2_score(y_train, y_train_pred_ridge)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3、正则化的线性回归（L2正则 --> 岭回归）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f114f6a61d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('alpha:', 10.0)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>coef_ridge</th>\n",
       "      <th>columns</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>[0.34628635011675407]</td>\n",
       "      <td>temp</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>[0.28439326470573395]</td>\n",
       "      <td>atemp</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>[0.2815134627742899]</td>\n",
       "      <td>season</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>[0.21935991796505966]</td>\n",
       "      <td>weathersit</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>[0.11678385816062686]</td>\n",
       "      <td>windspeed</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>[0.07030924746865011]</td>\n",
       "      <td>mnth</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>[0.05972590673272614]</td>\n",
       "      <td>instant</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>[0.059654745757595294]</td>\n",
       "      <td>hum</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>[0.03677669910494638]</td>\n",
       "      <td>weekday</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>[0.015442157293243962]</td>\n",
       "      <td>workingday</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               coef_ridge     columns\n",
       "6   [0.34628635011675407]        temp\n",
       "7   [0.28439326470573395]       atemp\n",
       "1    [0.2815134627742899]      season\n",
       "5   [0.21935991796505966]  weathersit\n",
       "9   [0.11678385816062686]   windspeed\n",
       "2   [0.07030924746865011]        mnth\n",
       "0   [0.05972590673272614]     instant\n",
       "8  [0.059654745757595294]         hum\n",
       "3   [0.03677669910494638]     weekday\n",
       "4  [0.015442157293243962]  workingday"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mse_mean = np.mean(ridge.cv_values_, axis = 0)\n",
    "plt.plot(np.log10(alphas), mse_mean.reshape(len(alphas),1)) \n",
    "\n",
    "#这是为了标出最佳参数的位置，不是必须\n",
    "#plt.plot(np.log10(ridge.alpha_)*np.ones(3), [0.28, 0.29, 0.30])\n",
    "\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()\n",
    "\n",
    "print ('alpha:', ridge.alpha_)\n",
    "\n",
    "# 看看各特征的权重系数，系数的绝对值大小可视为该特征的重要性\n",
    "fs = pd.DataFrame({\"columns\":list(columns), \"coef_ridge\":list(abs(ridge.coef_.T))})\n",
    "fs.sort_values(by=['coef_ridge'],ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of LinearRegression on test is 0.6704536699834356\n",
      "The r2 score of LinearRegression on train is 0.7597627034494492\n"
     ]
    }
   ],
   "source": [
    "from sklearn.linear_model import LinearRegression\n",
    "\n",
    "# 使用默认配置初始化\n",
    "lr = LinearRegression()\n",
    "\n",
    "# 训练模型参数\n",
    "lr.fit(X_train, y_train)\n",
    "\n",
    "# 预测\n",
    "y_test_pred_lr = lr.predict(X_test)\n",
    "y_train_pred_lr = lr.predict(X_train)\n",
    "#预测\n",
    "y_test_pred_ridge = lr.predict(X_test)\n",
    "y_train_pred_ridge = lr.predict(X_train)\n",
    "\n",
    "# 看看各特征的权重系数，系数的绝对值大小可视为该特征的重要性\n",
    "#fs = pd.DataFrame({\"columns\":list(columns), \"coef\":list((lr.coef_.T))})\n",
    "#fs.sort_values(by=['coef'],ascending=False)\n",
    "# 使用r2_score评价模型在测试集和训练集上的性能，并输出评估结果\n",
    "#测试集\n",
    "print 'The r2 score of LinearRegression on test is', r2_score(y_test, y_test_pred_lr)\n",
    "#训练集\n",
    "print 'The r2 score of LinearRegression on train is', r2_score(y_train, y_train_pred_lr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of LassoCV on test is 0.6048806860073238\n",
      "The r2 score of LassoCV on train is 0.6760213215143507\n"
     ]
    }
   ],
   "source": [
    "#### Lasso／L1正则\n",
    "# class sklearn.linear_model.LassoCV(eps=0.001, n_alphas=100, alphas=None, fit_intercept=True, \n",
    "#                                    normalize=False, precompute=’auto’, max_iter=1000, \n",
    "#                                    tol=0.0001, copy_X=True, cv=None, verbose=False, n_jobs=1,\n",
    "#                                    positive=False, random_state=None, selection=’cyclic’)\n",
    "from sklearn.linear_model import LassoCV\n",
    "\n",
    "#设置超参数搜索范围\n",
    "#alphas = [ 0.01, 0.1, 1, 10,100]\n",
    "\n",
    "#生成一个LassoCV实例\n",
    "#lasso = LassoCV(alphas=alphas)  \n",
    "lasso = LassoCV()  \n",
    "\n",
    "#训练（内含CV）\n",
    "lasso.fit(X_train, y_train)  \n",
    "\n",
    "#测试\n",
    "y_test_pred_lasso = lasso.predict(X_test)\n",
    "y_train_pred_lasso = lasso.predict(X_train)\n",
    "# 评估，使用r2_score评价模型在测试集和训练集上的性能\n",
    "\n",
    "print 'The r2 score of LassoCV on test is', r2_score(y_test, y_test_pred_lasso)\n",
    "print 'The r2 score of LassoCV on train is', r2_score(y_train, y_train_pred_lasso)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nSUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f1151f8c3d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('alpha is:', 0.16703196638946272)\n"
     ]
    }
   ],
   "source": [
    "mses = np.mean(lasso.mse_path_, axis = 1)\n",
    "plt.plot(np.log10(lasso.alphas_), mses) \n",
    "#plt.plot(np.log10(lasso.alphas_)*np.ones(3), [0.3, 0.4, 1.0])\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()    \n",
    "\n",
    "print ('alpha is:', lasso.alpha_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>coef_lasso</th>\n",
       "      <th>coef_lr</th>\n",
       "      <th>coef_ridge</th>\n",
       "      <th>columns</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.019952</td>\n",
       "      <td>[0.656616092512966]</td>\n",
       "      <td>[0.34628635011675407]</td>\n",
       "      <td>temp</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.510916</td>\n",
       "      <td>[0.02224396977455179]</td>\n",
       "      <td>[0.28439326470573395]</td>\n",
       "      <td>atemp</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.175415</td>\n",
       "      <td>[0.2959830441834153]</td>\n",
       "      <td>[0.2815134627742899]</td>\n",
       "      <td>season</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.106148</td>\n",
       "      <td>[0.23337479956846288]</td>\n",
       "      <td>[0.21935991796505966]</td>\n",
       "      <td>weathersit</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>[0.12125970381766608]</td>\n",
       "      <td>[0.11678385816062686]</td>\n",
       "      <td>windspeed</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>[0.5931187321703542]</td>\n",
       "      <td>[0.07030924746865011]</td>\n",
       "      <td>mnth</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>[0.5945767253501151]</td>\n",
       "      <td>[0.05972590673272614]</td>\n",
       "      <td>instant</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>[0.05095195975201486]</td>\n",
       "      <td>[0.059654745757595294]</td>\n",
       "      <td>hum</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>[0.03810596224903223]</td>\n",
       "      <td>[0.03677669910494638]</td>\n",
       "      <td>weekday</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>[0.016400666634147073]</td>\n",
       "      <td>[0.015442157293243962]</td>\n",
       "      <td>workingday</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   coef_lasso                 coef_lr              coef_ridge     columns\n",
       "6    0.019952     [0.656616092512966]   [0.34628635011675407]        temp\n",
       "7    0.510916   [0.02224396977455179]   [0.28439326470573395]       atemp\n",
       "1    0.175415    [0.2959830441834153]    [0.2815134627742899]      season\n",
       "5    0.106148   [0.23337479956846288]   [0.21935991796505966]  weathersit\n",
       "9    0.000000   [0.12125970381766608]   [0.11678385816062686]   windspeed\n",
       "2    0.000000    [0.5931187321703542]   [0.07030924746865011]        mnth\n",
       "0    0.000000    [0.5945767253501151]   [0.05972590673272614]     instant\n",
       "8    0.000000   [0.05095195975201486]  [0.059654745757595294]         hum\n",
       "3    0.000000   [0.03810596224903223]   [0.03677669910494638]     weekday\n",
       "4    0.000000  [0.016400666634147073]  [0.015442157293243962]  workingday"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 看看各特征的权重系数，系数的绝对值大小可视为该特征的重要性\n",
    "fs = pd.DataFrame({\"columns\":list(columns), \"coef_ridge\":list(abs(ridge.coef_.T)),\"coef_lasso\":list(abs(lasso.coef_.T)),\"coef_lr\":list(abs(lr.coef_.T))})\n",
    "fs.sort_values(by = ['coef_ridge'],ascending = False)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
